package com.lazily.homework;


/**
 * @Author: GZQ
 * @date: 2025/2/22 14:11
 * @description: 5. 有Person类,有name和Vehicles属性, 在构造器中为两个属性赋值
 */

public class Person {
	// 5. 有Person类,有name和Vehicles属性, 在构造器中为两个属性赋值
	private String name;
	private Vehicles vehicles;

	// 在啊创建人对象时, 事先给他分配一个交通工具
	public Person(String name, Vehicles vehicles) {
		this.name = name;
		this.vehicles = vehicles;
	}
	// 6. 实例化Person对象 “唐僧”, 要求一般情况下用Horse作为交通工具, 遇到大河时用Boat作为交通工具。
	// 这里涉及到一个编程思想，就是可以把具体的要求, 封装成方法

	// 7. 增加一个情况, 过火焰山 使用 飞机 ===> 程序扩展性, 我们前面的程序非常好扩展。


	// 思考： 如何不浪费,在构建对象时, 传入的交通工具对象 --- 代码实现如下
	public void passRiver() {
		// 	先得到船
		// 判断一下, 当前的 vehicles 属性是null, 就获取一艘船
		// 如何防止始终使用的是传入的马
		// if (vehicles == null ) {
		// vehicles instanceof Boat 是判断 当前的 vehicles 是不是 Baoat
		// (1) vehicles == null: veshicles instanceof Baot => false
		// (2) vehicles == 马对象: veshicles instanceof Baot => false
		// (3) vehicles == 船对象: veshicles instanceof Baot => true
		if (!(vehicles instanceof Boat)) {
			vehicles = VehiclesFactory.getBoat();
		}
		// 这里体现使用接口调用
		vehicles.work();
	}

	public void passFireHill() {
		// 	得到马
		// 判断一下, 当前的 vehicles 属性是null, 就获取一匹马
		// if (vehicles == null) {
		if (!(vehicles instanceof Plane)) {
			vehicles = VehiclesFactory.getPlane();
		}
		// 这里体现使用接口调用
		vehicles.work();
	}

	public void common() {
		// 	得到马
		// 判断一下, 当前的 vehicles 属性是null, 就获取一匹马
		// if (vehicles == null) {
		if (!(vehicles instanceof Horse)) {
			vehicles = VehiclesFactory.getHorse();
		}
		// 这里体现使用接口调用
		vehicles.work();
	}
}
